/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-1-14 上午11:29 Created by dwzhang
 */
package com.jade.bss.api.controller;

import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;

import com.jade.bss.api.vo.RegionVo;
import com.jade.framework.base.util.ResponseUtils;
import com.jade.modules.region.Region;
import com.jade.modules.region.RegionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 地区管理接口控制器。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-1-14 上午11:29
 */
@RestController
@RequestMapping ("/region")
public class RegionController
{
    @RequestMapping (value = "/listSub/{parentId}.json")
    public void listSubRegion(@PathVariable (value = "parentId") String parentId, HttpServletResponse response)
            throws Exception
    {
        ResponseUtils.writeSuccessResult(response, RegionUtils.listRegion(parentId));
    }

    @RequestMapping (value = "/listChildren.json")
    public void listChildren(@RequestParam (value = "parentId", required = false) String parentId,
                           @RequestParam (value = "level", defaultValue = "1") int level, HttpServletResponse response)
            throws Exception
    {
        List<Region> regions = RegionUtils.listRegion(parentId, level);
        ResponseUtils.writeSuccessResult(response, convertToVo(regions));
    }

    public static List<RegionVo> convertToVo(List<Region> regions)
    {
        List<RegionVo> regionVos = new ArrayList<RegionVo>();
        for (Region region : regions) {
            RegionVo regionVo = new RegionVo();
            regionVo.setId(region.getId());
            regionVo.setParentId(region.getParentId());
            regionVo.setCnName(
                    StringUtils.isNotBlank(region.getAbbrCnName()) ? region.getAbbrCnName() : region.getCnName());
            regionVo.setEnName(region.getEnName());
            if (region.getChildren() != null) {
                regionVo.setChildren(convertToVo(region.getChildren()));
            }
            regionVos.add(regionVo);
        }
        return regionVos;
    }

//    protected List<RegionVo> listChild(RegionVo parentVo, int level)
//    {
//        List<Region> regions = RegionUtils.listRegion(parentVo.getId());
//        List<RegionVo> regionVos = new ArrayList<RegionVo>();
//        for (Region region : regions) {
//            RegionVo regionVo = new RegionVo();
//            regionVo.setId(region.getId());
//            regionVo.setParentId(region.getParentId());
//            regionVo.setCnName(
//                    StringUtils.isNotBlank(region.getAbbrCnName()) ? region.getAbbrCnName() : region.getCnName());
//            regionVo.setEnName(region.getEnName());
//            regionVos.add(regionVo);
//        }
//        parentVo.setChildren(regionVos);
//        if (level > 1) {
//            for (RegionVo regionVo : regionVos) {
//                listChild(regionVo, level - 1);
//            }
//        }
//        return regionVos;
//    }
}
